package com.example.day3.stream;

import java.util.stream.Stream;

/**
 * 流的合并与截取
 */
public class C05ConcatSplitTest {

    public static void main(String[] args) {
        // 1. 合并
        Stream<Integer> s1 = Stream.of(1, 2, 3);
        Stream<Integer> s2 = Stream.of(4, 5, 1, 2);

        Stream<Integer> concat = Stream.concat(s1, s2);

        /*
            2. 截取 - 直接给出截取位置
            skip(long n)            跳过 n 个数据,保留剩下的
            limit(long n)           保留 n 个数据,剩下的不要
         */
        // concat.skip(2).forEach(System.out::println);
        // concat.limit(2).forEach(System.out::println);
        // concat.skip(2).limit(2).forEach(System.out::println);

        /*
            1   2   3   4   5   1   2
         */

        /*
            3. 截取 - 根据条件确定截取位置
            takeWhile(Predicate p)      条件成立保留, 一旦条件不成立,剩下的不要
            dropWhile(Predicate p)      条件成立舍弃, 一旦条件不成立,剩下的保留
         */
        // 返回的结果是1和2,因为到3的时候条件不成立剩下的数据都不要了直接丢弃
        // concat.takeWhile(x -> x < 3).forEach(System.out::println); // 1   2
        // 返回的结果是3和4和5,因为到3的时候条件不成立剩下的数据都保留
        concat.dropWhile(x -> x < 3).forEach(System.out::println); // 3   4   5
    }
}
